home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / xfs / xfs_buf_item.h < prev    next >
C/C++ Source or Header  |  2005-10-18  |  6KB  |  172 lines

  1. /*
  2.  * Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved.
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of version 2 of the GNU General Public License as
  6.  * published by the Free Software Foundation.
  7.  *
  8.  * This program is distributed in the hope that it would be useful, but
  9.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11.  *
  12.  * Further, this software is distributed without any warranty that it is
  13.  * free of the rightful claim of any third person regarding infringement
  14.  * or the like.  Any license provided herein, whether implied or
  15.  * otherwise, applies only to this software file.  Patent licenses, if
  16.  * any, provided herein do not apply to combinations of this program with
  17.  * other software, or any other product whatsoever.
  18.  *
  19.  * You should have received a copy of the GNU General Public License along
  20.  * with this program; if not, write the Free Software Foundation, Inc., 59
  21.  * Temple Place - Suite 330, Boston MA 02111-1307, USA.
  22.  *
  23.  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
  24.  * Mountain View, CA  94043, or:
  25.  *
  26.  * http://www.sgi.com
  27.  *
  28.  * For further information regarding this notice, see:
  29.  *
  30.  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
  31.  */
  32. #ifndef    __XFS_BUF_ITEM_H__
  33. #define    __XFS_BUF_ITEM_H__
  34.  
  35. /*
  36.  * This is the structure used to lay out a buf log item in the
  37.  * log.  The data map describes which 128 byte chunks of the buffer
  38.  * have been logged.  This structure works only on buffers that
  39.  * reside up to the first TB in the filesystem.  These buffers are
  40.  * generated only by pre-6.2 systems and are known as XFS_LI_6_1_BUF.
  41.  */
  42. typedef struct xfs_buf_log_format_v1 {
  43.     unsigned short    blf_type;    /* buf log item type indicator */
  44.     unsigned short    blf_size;    /* size of this item */
  45.     __int32_t    blf_blkno;    /* starting blkno of this buf */
  46.     ushort        blf_flags;    /* misc state */
  47.     ushort        blf_len;    /* number of blocks in this buf */
  48.     unsigned int    blf_map_size;    /* size of data bitmap in words */
  49.     unsigned int    blf_data_map[1];/* variable size bitmap of */
  50.                     /*   regions of buffer in this item */
  51. } xfs_buf_log_format_v1_t;
  52.  
  53. /*
  54.  * This is a form of the above structure with a 64 bit blkno field.
  55.  * For 6.2 and beyond, this is XFS_LI_BUF.  We use this to log everything.
  56.  */
  57. typedef struct xfs_buf_log_format_t {
  58.     unsigned short    blf_type;    /* buf log item type indicator */
  59.     unsigned short    blf_size;    /* size of this item */
  60.     ushort        blf_flags;    /* misc state */
  61.     ushort        blf_len;    /* number of blocks in this buf */
  62.     __int64_t    blf_blkno;    /* starting blkno of this buf */
  63.     unsigned int    blf_map_size;    /* size of data bitmap in words */
  64.     unsigned int    blf_data_map[1];/* variable size bitmap of */
  65.                     /*   regions of buffer in this item */
  66. } xfs_buf_log_format_t;
  67.  
  68. /*
  69.  * This flag indicates that the buffer contains on disk inodes
  70.  * and requires special recovery handling.
  71.  */
  72. #define    XFS_BLI_INODE_BUF    0x1
  73. /*
  74.  * This flag indicates that the buffer should not be replayed
  75.  * during recovery because its blocks are being freed.
  76.  */
  77. #define    XFS_BLI_CANCEL        0x2
  78. /*
  79.  * This flag indicates that the buffer contains on disk
  80.  * user or group dquots and may require special recovery handling.
  81.  */
  82. #define    XFS_BLI_UDQUOT_BUF    0x4
  83. /* #define XFS_BLI_PDQUOT_BUF    0x8 */
  84. #define    XFS_BLI_GDQUOT_BUF    0x10
  85.  
  86. #define    XFS_BLI_CHUNK        128
  87. #define    XFS_BLI_SHIFT        7
  88. #define    BIT_TO_WORD_SHIFT    5
  89. #define    NBWORD            (NBBY * sizeof(unsigned int))
  90.  
  91. /*
  92.  * buf log item flags
  93.  */
  94. #define    XFS_BLI_HOLD        0x01
  95. #define    XFS_BLI_DIRTY        0x02
  96. #define    XFS_BLI_STALE        0x04
  97. #define    XFS_BLI_LOGGED        0x08
  98. #define    XFS_BLI_INODE_ALLOC_BUF    0x10
  99. #define XFS_BLI_STALE_INODE    0x20
  100.  
  101.  
  102. #ifdef __KERNEL__
  103.  
  104. struct xfs_buf;
  105. struct ktrace;
  106. struct xfs_mount;
  107. struct xfs_buf_log_item;
  108.  
  109. #if defined(XFS_BLI_TRACE)
  110. #define    XFS_BLI_TRACE_SIZE    32
  111.  
  112. void    xfs_buf_item_trace(char *, struct xfs_buf_log_item *);
  113. #else
  114. #define    xfs_buf_item_trace(id, bip)
  115. #endif
  116.  
  117. /*
  118.  * This is the in core log item structure used to track information
  119.  * needed to log buffers.  It tracks how many times the lock has been
  120.  * locked, and which 128 byte chunks of the buffer are dirty.
  121.  */
  122. typedef struct xfs_buf_log_item {
  123.     xfs_log_item_t        bli_item;    /* common item structure */
  124.     struct xfs_buf        *bli_buf;    /* real buffer pointer */
  125.     unsigned int        bli_flags;    /* misc flags */
  126.     unsigned int        bli_recur;    /* lock recursion count */
  127.     atomic_t        bli_refcount;    /* cnt of tp refs */
  128. #ifdef XFS_BLI_TRACE
  129.     struct ktrace        *bli_trace;    /* event trace buf */
  130. #endif
  131. #ifdef XFS_TRANS_DEBUG
  132.     char            *bli_orig;    /* original buffer copy */
  133.     char            *bli_logged;    /* bytes logged (bitmap) */
  134. #endif
  135.     xfs_buf_log_format_t    bli_format;    /* in-log header */
  136. } xfs_buf_log_item_t;
  137.  
  138. /*
  139.  * This structure is used during recovery to record the buf log
  140.  * items which have been canceled and should not be replayed.
  141.  */
  142. typedef struct xfs_buf_cancel {
  143.     xfs_daddr_t        bc_blkno;
  144.     uint            bc_len;
  145.     int            bc_refcount;
  146.     struct xfs_buf_cancel    *bc_next;
  147. } xfs_buf_cancel_t;
  148.  
  149. void    xfs_buf_item_init(struct xfs_buf *, struct xfs_mount *);
  150. void    xfs_buf_item_relse(struct xfs_buf *);
  151. void    xfs_buf_item_log(xfs_buf_log_item_t *, uint, uint);
  152. uint    xfs_buf_item_dirty(xfs_buf_log_item_t *);
  153. void    xfs_buf_attach_iodone(struct xfs_buf *,
  154.                   void(*)(struct xfs_buf *, xfs_log_item_t *),
  155.                   xfs_log_item_t *);
  156. void    xfs_buf_iodone_callbacks(struct xfs_buf *);
  157. void    xfs_buf_iodone(struct xfs_buf *, xfs_buf_log_item_t *);
  158.  
  159. #ifdef XFS_TRANS_DEBUG
  160. void
  161. xfs_buf_item_flush_log_debug(
  162.     struct xfs_buf *bp,
  163.     uint    first,
  164.     uint    last);
  165. #else
  166. #define    xfs_buf_item_flush_log_debug(bp, first, last)
  167. #endif
  168.  
  169. #endif    /* __KERNEL__ */
  170.  
  171. #endif    /* __XFS_BUF_ITEM_H__ */
  172.